package cc.rengu.igas.channel.upqc.facade;

import cc.rengu.igas.channel.upqc.facade.request.*;
import cc.rengu.igas.channel.upqc.facade.response.*;
import cc.rengu.igas.channel.upqc.facade.result.Result;

/**
 * 银联二维码服务组件
 */
public interface UpqcService {

    /**
     * C2B 消费(被扫)
     *
     * @param c2BConsumeRequest
     * @return 被扫消费应答
     * @
     */
    Result<C2BConsumeResponse> c2bConsume(C2BConsumeRequest c2BConsumeRequest);

    /**
     * C2B 消费(被扫)冲正
     *
     * @param c2BConsumeRevsalRequest
     * @return 冲正应答
     * @
     */
    Result<C2BConsumeRevsalResponse> c2bConsumeRevsal(C2BConsumeRevsalRequest c2BConsumeRevsalRequest);

    /**
     * C2B 消费(被扫)撤销
     *
     * @param c2BConsumeCancelRequest
     * @return 消费撤销应答
     * @
     */
    Result<C2BConsumeCancelResponse> c2bConsumeCancel(C2BConsumeCancelRequest c2BConsumeCancelRequest);


    /**
     * C2B 消费(被扫)退货
     *
     * @param c2BConsumeRefundRequest
     * @return 消费退货应答
     * @
     */
    Result<C2BConsumeRefundResponse> c2bConsumeRefund(C2BConsumeRefundRequest c2BConsumeRefundRequest);


    /**
     * C2B 交易查询
     *
     * @param c2BTranStateQueryRequest
     * @return 交易查询结果
     * @
     */
    Result<C2BTranStateQueryResponse> c2bTransStateQuery(C2BTranStateQueryRequest c2BTranStateQueryRequest);


    /**
     * C2B预授权
     *
     * @param c2BPreAuthRequest
     * @return 预授权应答
     * @
     */
    Result<C2BPreAuthResponse> c2bPreAuth(C2BPreAuthRequest c2BPreAuthRequest);

    /**
     * C2B预授权冲正
     *
     * @param c2BPreAuthRevsalRequest
     * @return 预授权冲正应答
     * @
     */
    Result<C2BPreAuthRevsalResponse> c2bPreAuthRevsal(C2BPreAuthRevsalRequest c2BPreAuthRevsalRequest);


    /**
     * C2B预授权撤销
     *
     * @param c2BPreAuthCancelRequest
     * @return 预授权撤销应答
     * @
     */
    Result<C2BPreAuthCancelResponse> c2bPreAuthCancel(C2BPreAuthCancelRequest c2BPreAuthCancelRequest);


    /**
     * C2B预授权完成
     *
     * @param c2BPreAuthFinishRequest
     * @return 预授权完成应答
     * @
     */
    Result<C2BPreAuthFinishResponse> c2bPreAuthFinish(C2BPreAuthFinishRequest c2BPreAuthFinishRequest);


    /**
     * C2B预授权完成冲正
     *
     * @param c2BPreAuthFinishRevsalRequest
     * @return C2B预授权完成冲正应答
     * @
     */
    Result<C2BPreAuthFinishRevsalResponse> c2bPreAuthFinishRevsal(C2BPreAuthFinishRevsalRequest c2BPreAuthFinishRevsalRequest);

    /**
     * C2B预授权完成撤销
     *
     * @param c2BPreAuthFinishCancelRequest
     * @return C2B预授权完成撤销应答
     * @
     */
    Result<C2BPreAuthFinishCancelResponse> c2bPreAuthFinishCancel(C2BPreAuthFinishCancelRequest c2BPreAuthFinishCancelRequest);

    /**
     * 生成二维码
     *
     * @param genQrCodeRequest
     * @return
     * @
     */
    Result<GenQrCodeResponse> genQrCode(GenQrCodeRequest genQrCodeRequest);

    /**
     * 收款查询（主扫）
     *
     * @param b2CTranStateQueryRequest
     * @return 收款查询应答
     * @
     */
    Result<B2CTranStateQueryResponse> b2cTransStateQuery(B2CTranStateQueryRequest b2CTranStateQueryRequest);

    /**
     * 主扫消费撤销
     *
     * @param b2CConsumeCancelRequest
     * @return 主扫消费撤销应答
     * @
     */
    Result<B2CConsumeCancelResponse> b2cConsumeCancel(B2CConsumeCancelRequest b2CConsumeCancelRequest);

    /**
     * 撤销二维码
     *
     * @param qrCodeCancelRequest
     * @return 撤销二维码应答
     * @
     */
    Result<QrCodeCancelResponse> qrcodeCancel(QrCodeCancelRequest qrCodeCancelRequest);

    /**
     * B2C 消费(主扫)退货
     *
     * @param b2CConsumeRefundRequest
     * @return 消费退货应答
     * @
     */
    Result<B2CConsumeRefundResponse> b2cConsumeRefund(B2CConsumeRefundRequest b2CConsumeRefundRequest);


}

